package org.wzy.design.patterns.prototype.simple;

public class CloneTest {
	public static void main(String[] args) throws CloneNotSupportedException {
		ConcreatePrototype cp = new ConcreatePrototype();
		cp.setAge(18);
		cp.setName("Tom");
		cp.arrayList.add("Tom");

		// clone不走构造方法
		ConcreatePrototype copy = (ConcreatePrototype) cp.clone();
		System.out.println(copy.arrayList == cp.arrayList); // true，该list为公用的，不直接复制内容，而是直接指向引用地址
		System.out.println(copy.getAge() + "  " + copy.getName() + " " + copy.arrayList.size());

		// 如果不用上述方式：
		// ConcreatePrototype cp = new ConcreatePrototype();
		// cp.setAge(18);
		// cp.setName("Tom");

		// ConcreatePrototype copy = new ConcreatePrototype();
		// copy.setAge(18);
		// copy.setName("Tom");
		// ...若有更多属性，继续set下去
		// 也可以使用循环、反射，确实可以实现相同的结果(反射性能并不高)
	}
}
